package 
{
	import flash.display.DisplayObject;
	import flash.display.MovieClip;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import classes.KeyPoll;
	import Class;
	import flash.utils.getQualifiedClassName;
	import flash.utils.getDefinitionByName;
	import com.greensock.*; 
	import com.greensock.easing.*;
	import flash.events.MouseEvent;
	import flash.media.Sound	
	import flash.media.SoundMixer;	
	import flash.media.SoundChannel;
	import flash.events.TimerEvent;
	import flash.utils.Timer;		
	
	/**
	 * ...
	 * @author rsilva
	 */
	public class Main extends MovieClip 
	{
		public var stageWidth:int = 800;
		public var stageHeight:int = 600;
		private var keyboard:KeyPoll;
		//public var player:MovieClip = new char1_MC();
		public var player:MovieClip;
		public var playerRow:int = 13;
		public var playerCol:int;
		
		public var EstadoJogo:String;
		
		public var movimentacao:int = 0;
		public var moveRelease:int  = 0;
		public var timer:int = 0;
		public var canMove:Boolean = true;
		public var horLimit:int = 0;
		public var horLimitControle:int = 4;
		public var countMoveTorcedores:int = 0;
		public var Subindo:Boolean = false;
		
		public var PontosAtual:Number;
		public var LevelAtual:Number;
		public var LadoAtual:Number;
		public var VelCaidaLinha:Number;
		public var TerminouJogo:Boolean = false;
		
		public var torcedoresArray:Array = new Array()
		public var controleTorcedoresArray:Array = new Array();
		public var TorcedoresFilaEsquerdaArray:Array = new Array();
		public var TorcedoresFilaDireitaArray:Array = new Array();
		
		public var TorcedoresArquibancadaEsquerdoArray:Array = new Array();
		public var TorcedoresArquibancadaDireitoArray:Array = new Array();
		public var ladoArquibancada:String = "Esquerdo";
		
		public var Hudmcd:MovieClip = new Hud_MC();
		public var bgCenario:MovieClip = new GameplayBG_MC();
		public var GameOvermc:MovieClip = new TelaFinal();
		public var Vidro:MovieClip = new Vidro_MC();
		public var Tunel:MovieClip = new Tunel_MC();
		public var CharMib:MovieClip = new mib_MC();
		public var CharMibFlip:Boolean = false;
		public var Letreiro:MovieClip = new mc_letreiro();
		public var LevelUP:MovieClip = new mc_LevelUp_anim();	
		
		public var PessoasNoEstadio:int = 0;
		public var RoundAtual:int = 1;
		
		public var soundChannel:SoundChannel;
		[Embed(source="../lib/Sons/somGameplay.mp3")]
		public var musicaGameplay:Class;
		public var mySound:Sound;
		
		[Embed(source="../lib/Sons/somPontos.mp3")]
		public var musicaPontos:Class;
		public var sndPonto:Sound;	
		
		[Embed(source = "../lib/Sons/somDerrota.mp3")]
		public var DerrotaClass:Class;
		public var sndDerrota:Sound;		
		
		public function Main(stage:DisplayObject):void 
		{
			this.addChild(bgCenario);
			this.EstadoJogo = "Parado";
			RoundAtual = 1;
			PontosAtual = 0;
			VelCaidaLinha = 4;
			PessoasNoEstadio = 0;
			LevelAtual = 0;
			CharMib.x = 32 * 12;
			CharMib.y = 32 * 16;
			CharMib.gotoAndStop(1);
			LevelUP.x -= 200;
			LevelUP.y -= 200;
			LevelUP.gotoAndStop(1);
			LadoAtual = 3;
			GameOvermc.x = -600;
			GameOvermc.y = -800;			
			
			this.addChild(Letreiro);
			Letreiro.x = 370;
			Letreiro.y = 407;
			
			var	colNum:int = 9,
				rowNum:int =14,
				xG:Number = stageWidth - (colNum * 32) * 2 + 32, 
				yG:Number = 64,
				wI:Number = 32,
				hI:Number = 32;
				
			for (var i:int = 0; i < rowNum; i++) {
				this.torcedoresArray[i] = new Array();
				for (var j:int = 0; j < colNum; j++) {
					if (i < 3) {
						var temp:MovieClip = CriaChar("Frente", "Parado");
						
						temp.x = xG + (wI * j);
						temp.y = yG + (hI * i);
						
						temp.row = i;
						temp.col = j;
						this.torcedoresArray[i][j] = temp;
						this.addChild(temp);
					
					}else{
						
						var temp3:Array = new Array();
						temp3.x = xG + (wI * j);
						temp3.y = yG + (hI * i);
						
						this.torcedoresArray[i][j] = temp3;
						
					}
				}
			}
	
			this.addChild(Tunel);

			//Cria Fila Lado Esquerdo
			for (var k:int = 0; k < 7; k++) {
					var temp4:MovieClip = CriaChar("LadoD", "Parado");
					
					temp4.x = - (k * 32) - 32;
					temp4.y = 512;
					
					this.TorcedoresFilaEsquerdaArray[k] = temp4;
					this.addChild(temp4);
					
					AlteraFrame(temp4, "LadoD", "Caminhando");
					TweenLite.to(temp4, 4, {x:192 + temp4.x + 32, onComplete: paraCharFila, onCompleteParams:[temp4, "LadoD"]} );
			}	
			
			//Cria Fila Lado Direito
			for (k = 0; k < 6; k++) {
					var temp5:MovieClip = CriaChar("LadoE", "Parado");
					
					temp5.x = 800 + (k * 32) + 32;
					temp5.y = 512;
					
					this.TorcedoresFilaDireitaArray[k] = temp5;
					this.addChild(temp5);

					AlteraFrame(temp5, "LadoE", "Caminhando");
					TweenLite.to(temp5, 4, {x:-160 + temp5.x - 32, onComplete: paraCharFila, onCompleteParams:[temp5, "LadoE"]} );
			}				
			
			this.addChild(CharMib);
			this.addChild(Vidro);
			this.addChild(LevelUP);
			this.addChild(Hudmcd);
			
			mySound = (new musicaGameplay) as Sound;
			soundChannel = mySound.play(0, 9999);
			sndPonto = (new musicaPontos) as Sound;
			sndDerrota =  (new DerrotaClass) as Sound;
		}


		private function InverteCharMib():void {
			if(CharMibFlip == true){	
				CharMibFlip = false;
				CharMib.scaleX *= -1;
				CharMib.x = 12 * 32;	
			}else {
				CharMibFlip = true;
				CharMib.scaleX *= -1;
				CharMib.x = 13 * 32;
			}
		}
		
		private function paraCharFila(char:MovieClip, Posicao:String):void {
			AlteraFrame(char, Posicao, "Parado");
			
			if(EstadoJogo == "Parado"){
				IniciaGame();
				EstadoJogo = "Rolando";
			}
		}
		
		private function IniciaGame():void {
			this.keyboard = new KeyPoll(stage);
				
			//this.addChildAt(player, this.getChildIndex(bgCenario) + 1);
			//this.addChild(player);
			//this.playerCol = LadoAtual;
			//this.player.x = this.torcedoresArray[13][LadoAtual].x;
			//this.player.y = this.torcedoresArray[13][LadoAtual].y;
			//this.player.Numero = 0;
			//CriaCharFilasLaterais();
			//CriaPlayer();
			ChamaNovoPlayer();
			//this.LadoAtual = 5;
			//this.addEventListener(Event.ENTER_FRAME, gameLoop)
		}
		
		private function MoveCharLateral(play:MovieClip):void {
			
			TweenLite.to(play, 1.5, {x:stageWidth /2, onComplete: FinalizaCriacaoPlayer, onCompleteParams:[play]} );
			
		}
		
		private function CriaPlayer(movieClip:MovieClip, numero:int):void {
			this.movimentacao = 0;
			this.moveRelease = 0;
			this.timer = 0;
			
			this.countMoveTorcedores++;			
			
			//var temp :MovieClip = CriaChar("Costas", "Caminhando");
			var temp:MovieClip;
			var Tipo:Class = Class(getDefinitionByName(getQualifiedClassName(movieClip)));
			switch(Tipo) {
				case char1_MC:
					temp = new char1_MC;
					break;
				case char2_MC:
					temp = new char2_MC;
					break;
				case char3_MC:
					temp = new char3_MC;
					break;
				case char4_MC:
					temp = new char4_MC;					
					break;
				case char5_MC:
					temp = new char5_MC;
					break;
				case char6_MC:
					temp = new char6_MC;					
					break;
			}
			temp.x = this.torcedoresArray[13][LadoAtual].x;
			temp.y = this.torcedoresArray[13][LadoAtual].y;
			this.playerCol = LadoAtual;
			this.playerRow = 13;
			temp.row = 13;
			temp.col = LadoAtual;
			temp.Numero = numero;
			AlteraFrame(temp, "Costas", "Caminhando");
			
			this.player = temp;
			this.addChild(this.player);
			
			//this.player.x = this.torcedoresArray[13][LadoAtual].x;
			//this.player.y = this.torcedoresArray[13][LadoAtual].y;
		}
		
		public function FinalizaCriacaoPlayer(newPlayer:MovieClip):void {
			
			this.player = newPlayer;
			this.movimentacao = 0;
			this.moveRelease = 0;
			this.timer = 0;
			
			if(LadoAtual == 3){
				this.player.x = this.torcedoresArray[13][5].x;
				this.player.y = this.torcedoresArray[13][5].y;
				this.player.row = 13;
				this.player.col = 5;
				playerRow = 13;
				playerCol = 5;
			}else {
				this.player.x = this.torcedoresArray[13][3].x;
				this.player.y = this.torcedoresArray[13][3].y;
				this.player.row = 13;
				this.player.col = 3;
				playerRow = 13;
				playerCol = 3;
			}
			
			AlteraFrame(this.player, "Costas", "Caminhando");
		}
		
		public function CriaCharHorizontal():void {
			for (var numC:int = 0; numC < 9; numC++ ) {
				var temp:MovieClip = CriaChar("Frente", "Parado"),
					xG:Number = stageWidth - (9 * 32) * 2 + 32,
					yG:Number = 32;// initializing the variable named rectangle
					
					temp.x = xG + (32 * numC);
					temp.y = yG + (32 * 0);
					temp.row = 0;
					temp.col = numC;
					this.torcedoresArray[0][numC] = temp;
					
					this.AlteraFrame(temp, "Frente", "Parado");
					temp.y += 32;
					//TweenLite.to(temp, 1, {y:temp.y + 32, onComplete: moveFila, onCompleteParams: [temp]} );
					
					this.addChild(temp);
			}
		}
		
		private function CriaChar(Posicao:String, Acao:String):MovieClip {
			
			var NovoChar:MovieClip;
			var nChar:int = Math.random() * 7;
			switch(nChar) {
				case 1:
					NovoChar = new char1_MC;
					break;
				case 2:
					NovoChar = new char2_MC;
					break;					
				case 3:
					NovoChar = new char3_MC;
					break;					
				case 4:
					NovoChar = new char4_MC;
					break;					
				case 5:
					NovoChar = new char5_MC;
					break;
				case 6:
					NovoChar = new char6_MC;
					break;		
				default:
					NovoChar = new char6_MC;
			}
			
			var n:int = Math.random() * 5;
			if (n <= 1){
				NovoChar.Numero = 0;
			}else {
				NovoChar.Numero = 155;
			}
			
			AlteraFrame(NovoChar, Posicao, Acao);
			return NovoChar;
		}
		
		public function AlteraFrame(Movieclip:MovieClip , Posicao:String, Acao:String):void {
			if (Movieclip == null) {
			 	Movieclip = CriaChar("Costas", "Caminhando");
			}else {
				switch(Posicao) {
					case "Frente":
						if (Acao == "Sentado") {
							Movieclip.gotoAndStop(37 + Movieclip.Numero);
						}else if (Acao == "Parado") {
							Movieclip.gotoAndStop(41 + Movieclip.Numero);
						}else if (Acao == "Caminhando") {
							Movieclip.gotoAndPlay(41 + Movieclip.Numero);
						}else if (Acao == "Ola") {
							Movieclip.gotoAndPlay(88 + Movieclip.Numero);
						}else if (Acao == "Branco") {
							Movieclip.gotoAndPlay(138 + Movieclip.Numero);
						}
						break;
					case "Costas":
						if (Acao == "Parado") {
							Movieclip.gotoAndStop(1 + Movieclip.Numero);
						}else if (Acao == "Caminhando") {
							Movieclip.gotoAndPlay(1 + Movieclip.Numero);
						}
						break;
					case "LadoD":
						if (Acao == "Parado") {
							Movieclip.gotoAndStop(105 + Movieclip.Numero);
						}else if (Acao == "Caminhando") {
							Movieclip.gotoAndPlay(105 + Movieclip.Numero);
						}else if (Acao == "Cachorro") {
							Movieclip.gotoAndPlay(89 + Movieclip.Numero);
						}
						break;
					case "LadoE":
						if (Acao == "Parado") {
							Movieclip.gotoAndStop(105 + Movieclip.Numero);
						}else if (Acao == "Caminhando") {
							Movieclip.gotoAndPlay(105 + Movieclip.Numero);
						}else if (Acao == "Cachorro") {
							Movieclip.gotoAndPlay(89 + Movieclip.Numero);
						}
						Movieclip.scaleX = -1;
						break;
				}			
			}
		}
		
		// Funcoes Hud
		public function AdicionaPontos(Pontos:Number):void {
			sndPonto.play();
			PessoasNoEstadio += Pontos;
			
			if (Pontos >= 6 && Pontos <= 10) {
				Pontos *= 2;
			}else if (Pontos >= 11 && Pontos <= 15) {
				Pontos *= 3;
			}else if (Pontos >= 16 && Pontos <= 20) {
				Pontos *= 4;
			}
			Pontos *= 1000;
			
			PontosAtual += Pontos;
			if (PontosAtual >= 999999) {
				PontosAtual = 999999;
			}
			
			Hudmcd.txtPontos.text = PontosAtual.toString();
			if (Hudmcd.txtPontos.length < 6 ){
				var ZeroParaAdicionar:int = 0;
				ZeroParaAdicionar = 6 - Hudmcd.txtPontos.length; 
				
				while(ZeroParaAdicionar > 0){
					Hudmcd.txtPontos.text = "0" + Hudmcd.txtPontos.text;
					
					ZeroParaAdicionar--;
					Hudmcd.txtPontos.text;
				}
				
			}
			
			if (PontosAtual >= 999999) {
				PontosAtual = 999999;
				GameOver();
				return;
			}				
			
			var LevelNovo:int;
			if (PessoasNoEstadio >= 2 && PessoasNoEstadio <= 3 ) {
				LevelNovo = 2;
			}
			if (PessoasNoEstadio >= 4 && PessoasNoEstadio <= 9 ) {
				LevelNovo = 3;
			}
			if (PessoasNoEstadio >= 10 && PessoasNoEstadio <= 15 ) {
				LevelNovo = 4;
			}			
			if (PessoasNoEstadio >= 16 && PessoasNoEstadio <= 23 ) {
				LevelNovo = 5;
			}
			if (PessoasNoEstadio >= 24 && PessoasNoEstadio <= 36 ) {
				LevelNovo = 6;
			}			
			if (PessoasNoEstadio >= 37 && PessoasNoEstadio <= 55 ) {
				LevelNovo = 7;
			}			
			if (PessoasNoEstadio >= 56 && PessoasNoEstadio <= 84 ) {
				LevelNovo = 8;
			}			
			if (PessoasNoEstadio >= 85 && PessoasNoEstadio <= 127 ) {
				LevelNovo = 9;
			}			
			if (PessoasNoEstadio >= 128 && PessoasNoEstadio <= 192 ) {
				LevelNovo = 10;
				if(VelCaidaLinha >= 1){
					VelCaidaLinha--;
				}
			}			
			
			if (LevelNovo > LevelAtual) {
				AtualizaLevel(LevelNovo);
				LevelUP.x = stageWidth / 2;
				LevelUP.y = stageHeight / 2;
				LevelUP.gotoAndPlay(1);
				var tLevelUp:Timer = new Timer(1000, 1);
				tLevelUp.addEventListener(TimerEvent.TIMER, RemoveLevelUp);
				tLevelUp.start();				
			}
			
			if (PessoasNoEstadio >= 196) {
				RoundAtual++;
				changeLevel();
			}
		}
		
		public function RemoveLevelUp(e:Event):void {
			LevelUP.x = -300;
			LevelUP.gotoAndStop(1);
		}
		
		public function GameOver():void {
			this.removeEventListener(Event.ENTER_FRAME, gameLoop);
			SoundMixer.stopAll();
			this.addChild(GameOvermc);
			GameOvermc.x = 0;
			GameOvermc.y = 0;
			TerminouJogo = true;
			GameOvermc.txtLevel.text = Hudmcd.txtLevel.text;
			GameOvermc.txtTotalScore.text = Hudmcd.txtPontos.text;
			sndDerrota.play();
			//GameOvermc.btnJogar.addEventListener(MouseEvent.CLICK, RemoverGameOver );
			//GameOvermc.btnMenu.addEventListener(MouseEvent.CLICK, AdicionaMenu );
			
		}
		
		public function RemoverGameOver(e:MouseEvent):void {
			GameOvermc.x = -800;
		}
		
		public function AdicionaMenu(e:MouseEvent):void {
			this.x = -800;
			this.parent.removeChild(this);
		}		
		
		public function AtualizaLevel(LevelNovo:int):void {
			LevelAtual = LevelNovo;
			
			if (LevelAtual > 99){
				GameOver();
				return;
			}
			
			Hudmcd.txtLevel.text = LevelAtual.toString();
			if (Hudmcd.txtLevel.length < 2){
				Hudmcd.txtLevel.text = "0" + Hudmcd.txtLevel.text;
			}
			
		}				
		
		private function gameLoop(e:Event):void 
		{
			this.timer++;
			
			if (((this.timer == 30 / 2) && this.moveRelease == 0) && this.playerRow > 0 || this.horLimit == horLimitControle && this.Subindo == false) {
				this.moveRelease = 4;
				this.movimentacao = (this.player.y % 32);
				this.canMove = false;
				this.horLimit = 0;
			}
			if (this.moveRelease == 2 && this.Subindo == false) 
			{
				
				this.movimentacao += 4;
				this.walk( -1, 0);
				
				if (this.movimentacao < 5){
					if (CharMibFlip == true) {
						InverteCharMib();
					}						
					CharMib.gotoAndPlay(96);	
				}
				
				
				if (this.movimentacao > 30) 
				{
					this.moveRelease = 0;
					this.movimentacao = 0;
					this.timer = 0;
					this.horLimit++;
					this.playerCol -= 1;
					this.player.col = this.playerCol;
					CharMib.gotoAndPlay(1);	
				}
				
			}
			
			if (this.moveRelease == 1 && this.Subindo == false) 
			{
				this.movimentacao += 4;
				this.walk(1, 0);
				
				if (this.movimentacao < 5){
					if (CharMibFlip == false) {
						InverteCharMib();
					}
					CharMib.gotoAndPlay(96);	
				}
				
				if (this.movimentacao > 30) 
				{
					this.moveRelease = 0;
					//this.map.hero.playerMC.gotoAndStop(3);
					this.movimentacao = 0;
					this.timer = 0;
					this.horLimit++;
					this.playerCol += 1;
					this.player.col = this.playerCol;
					CharMib.gotoAndPlay(1);	
				}
				
			}
			
			if (this.moveRelease == 4 && Subindo == false) 
			{
				this.movimentacao += 4;
				this.walk( 0, -1);
				//trace(this.movimentacao);
				if (this.movimentacao > 30) 
				{
					this.moveRelease = 0;
					//this.lastKeyDown = 0;
					//this.map.hero.playerMC.gotoAndStop(1);
					this.movimentacao = 0;
					this.canMove = true;
					this.timer = 0;
					this.playerRow -= 1
					this.player.row = this.playerRow;
					CharMib.gotoAndPlay(1);					
				}					
			}else if (this.moveRelease == 4 && Subindo == true) {
				for (var ct:int = this.torcedoresArray.length - 1; ct >= 0 ; ct-- )
				{
					//this.torcedoresArray[ct][playerCol].row != null && 
					if (!(this.torcedoresArray[ct][playerCol] is Array)) {
						this.playerRow = this.torcedoresArray[ct][playerCol].row + 1;
						this.moveRelease = 0;
						this.horLimit = horLimitControle;
						TweenLite.to(this.player, 1, { y:this.torcedoresArray[ct][playerCol].row * 32 + 96, onComplete:SubindoFalse } );
						break;
					}else if (ct == 0) {
						this.playerRow = 0;
						this.moveRelease = 0;
						TweenLite.to(this.player, 1, { y:64, onComplete:SubindoFalse});
					}
				}
			}
			
			if(this.canMove){
				if (this.keyboard.isDown(KeyPoll.RIGHT)&&
						(this.keyboard.isUp(KeyPoll.UP) &&
						 this.keyboard.isUp(KeyPoll.LEFT) &&
						 this.keyboard.isUp(KeyPoll.DOWN)) 
							&& this.movimentacao == 0
							&& this.moveRelease == 0
							&& this.Subindo == false
							) 
				{
					
					if (this.moveRelease == 0 &&
						(this.keyboard.isUp(KeyPoll.LEFT) &&
						 this.keyboard.isUp(KeyPoll.UP) &&
						 this.keyboard.isUp(KeyPoll.DOWN) &&
						 this.playerCol < 8))
					{
						this.moveRelease = 1;
						this.movimentacao = (this.player.x % 32);
					}
						
				}
				
				if (this.keyboard.isDown(KeyPoll.LEFT)&&
						(this.keyboard.isUp(KeyPoll.UP) &&
						 this.keyboard.isUp(KeyPoll.RIGHT) &&
						 this.keyboard.isUp(KeyPoll.DOWN)) 
							&& this.movimentacao == 0
							&& this.moveRelease == 0
							&& this.Subindo == false
							) 
				{
					
					if (this.moveRelease == 0 &&
						(this.keyboard.isUp(KeyPoll.RIGHT) &&
						 this.keyboard.isUp(KeyPoll.UP) &&
						 this.keyboard.isUp(KeyPoll.DOWN) &&
						 this.playerCol > 0))
					{
						this.moveRelease = 2;
						this.movimentacao = (this.player.x % 32);
					}
						
				}
				
				if (this.keyboard.isDown(KeyPoll.UP)&&
						(this.keyboard.isUp(KeyPoll.LEFT) &&
						 this.keyboard.isUp(KeyPoll.RIGHT) &&
						 this.keyboard.isUp(KeyPoll.DOWN)) 
							&& this.moveRelease == 0
							&& this.Subindo == false) 
				{
					
					if (this.moveRelease == 0 &&
						(this.keyboard.isUp(KeyPoll.RIGHT) &&
						 this.keyboard.isUp(KeyPoll.LEFT) &&
						 this.keyboard.isUp(KeyPoll.DOWN) &&
						 this.playerRow < 13))
					{
						this.Subindo = true;
					}
						
				}
				
			}
		}
		
		public function SubindoFalse():void {
			move(0, -1);
			this.horLimit = 0;
			this.Subindo = false;
			this.timer = 0;
			this.canMove = true;
		}		
		
		public function walk(directionX:int, directionY:int):void 
		{

			var x:int = this.player.x + (4  * directionX);
			var y:int = this.player.y + (4  * directionY);
				
			if(this.move(directionX, directionY))
			{
				this.player.x = x;
				this.player.y = y;
			}else {
				this.movimentacao = 0;
				this.moveRelease = 0;
			}
		}
		
		public function move(dirX:int, dirY:int):Boolean
		{
			var retorno:Boolean = true,
				col:int = this.playerCol,
				row:int = this.playerRow;
			
			for (var mtr:int = 13; mtr >= 0; mtr--) 
			{
				for (var mtc:int = 8; mtc >=0; mtc--) 
					{
					if(!(this.torcedoresArray[mtr][mtc] is Array)){
						//this.AlteraFrame(this.torcedoresArray[mtr][mtc], "Frente", "Caminhando");
						if (mtr >= 13) {
							this.removeEventListener(Event.ENTER_FRAME, gameLoop)
							GameOver();
						}
					}
				}
			}	
				
			
			//if(row > 0){
			var Tipo:Class = Class(getDefinitionByName(getQualifiedClassName(this.player)));	
			var walkPerCol:Array = new Array();
			var elementsToDelete:Array = new Array();
				var rowTeste:int = 0;
				if (row  + (1 * dirY) >= 0) {
					rowTeste = row  + (1 * dirY);
				}
				if (torcedoresArray[rowTeste][col] is  Tipo) {
					this.controleTorcedoresArray.push(this.player);
					this.controleTorcedoresArray.push(torcedoresArray[row - 1][col]);
					this.bounceCollision(row - 1, col, Tipo);
					
					if (this.controleTorcedoresArray.length >= 0) {
						
						this.respawArquibancada(this.controleTorcedoresArray.length);
						
						for (var ct:int = 0; ct < this.controleTorcedoresArray.length; ct++ )
						{
							if (this.controleTorcedoresArray[ct] && this.controleTorcedoresArray[ct].parent != null) {
								var xCT:Number = this.controleTorcedoresArray[ct].x,
									yCT:Number = this.controleTorcedoresArray[ct].y,
									rCT:int = this.controleTorcedoresArray[ct].row,
									cCT:int = this.controleTorcedoresArray[ct].col,
									nCT:int = this.controleTorcedoresArray[ct].Numero;
								this.AlteraFrame(this.controleTorcedoresArray[ct], "Frente", "Branco")
								TweenLite.to(this.controleTorcedoresArray[ct], 1, {onComplete: deleteAfterGlow, onCompleteParams: [this.controleTorcedoresArray[ct]]} );	
															    
								elementsToDelete.push(ct);
								if(walkPerCol[cCT]){
									walkPerCol[cCT] ++;	
								}else {
									walkPerCol[cCT] = 1;
								}	
																
								var tEl:Array = new Array();
								tEl.row = rCT;
								tEl.col = cCT;
								tEl.Numero = nCT;
								torcedoresArray[rCT][cCT] = tEl;
								
								//tEl.x = xCT;
								//tEl.y = xCT;
								
							}
							
							
						}
					}
					
					for (var etD:int = 0; etD < elementsToDelete.length; etD++ ) {
						this.controleTorcedoresArray.splice(elementsToDelete[etD], 1);
					}
					
					if(TerminouJogo == false){
						for (var k:int  = 0; k < this.torcedoresArray.length; k++ ) {
							
							for (var l:int  = 0; l < this.torcedoresArray[k].length; l++ ) {
								if (!(this.torcedoresArray[k][l] is Array) && k!= 0 && this.torcedoresArray[k - 1][l] is Array) {
									if(walkPerCol.length > 0){
										var eleAnt:Array = new Array();
										this.torcedoresArray[k][l].y -= walkPerCol[l] * 32;
										if((this.torcedoresArray[k][l].y - 64) >= 0){
											var yP:int = (this.torcedoresArray[k][l].y - 64) / 32;
											this.torcedoresArray[yP][l] = this.torcedoresArray[k][l];
											eleAnt.row = this.torcedoresArray[k][l].row;
											eleAnt.col = this.torcedoresArray[k][l].col;
											this.torcedoresArray[k][l] = eleAnt;
										}
									}
								}
															
							}
							
						}
						ChamaNovoPlayer();				
						
						if(this.countMoveTorcedores == VelCaidaLinha){	
						//MOVE FILA
										
						for (var mtr1:int = 13; mtr1 >= 0; mtr1--) 
						{
							for (var mtc1:int = 8; mtc1 >=0; mtc1--) 
							{
								if(!(this.torcedoresArray[mtr1][mtc1] is Array) && (this.torcedoresArray[mtr1][mtc1].deleted == true)){
									if(this.torcedoresArray[mtr1][mtc1].parent){
									TweenLite.to(this.torcedoresArray[mtr1][mtc1], 1, { y:this.torcedoresArray[mtr1][mtc1].y + 32, onComplete: moveFila, onCompleteParams: [this.torcedoresArray[mtr1][mtc1]] } );
									}else {
										trace("GHost in the HaAusss!");
										
										//var inhr:int = this.getChildIndex(this.torcedoresArray[mtr1][mtc1]);
										//this.removeChildAt(inhr);									
										//this.torcedoresArray[mtr1 + 1][mtc1] = new Array();
									}					
									//this.AlteraFrame(this.torcedoresArray[mtr][mtc], "Frente", "Caminhando");
									//TweenLite.to(this.torcedoresArray[mtr1][mtc1], 1, {y:this.torcedoresArray[mtr1][mtc1].y+ 32, onComplete: moveFila, onCompleteParams: [this.torcedoresArray[mtr1][mtc1]]} );
								}
							}
						}
						
						this.CriaCharHorizontal();
						this.countMoveTorcedores = 0;
						}
						
						
						//FIX ME!!
						this.controleTorcedoresArray = null;
						this.controleTorcedoresArray = new Array();
					}
				//}
				
				retorno = false;
				
			}/*else if () {
				
			
			}else if () {
				
				
			}*/else{

			    if (torcedoresArray[rowTeste][col + (1 * dirX)] is Array) {
					retorno = true;
				}else{
				
						
					retorno = false;
					var xT:Number = this.player.x,
						yT:Number = this.player.y;
						
						
										
						var tEl2:MovieClip = new Tipo();
						this.torcedoresArray[this.playerRow][this.playerCol] = tEl2;
						tEl2.x = xT ;
						tEl2.y = yT ;
						tEl2.row = this.playerRow;
						tEl2.col = this.playerCol;
						tEl2.Numero = this.player.Numero;
						
						this.AlteraFrame(tEl2, "Frente", "Parado");
						this.addChild(tEl2);
						
						var rem:int = this.getChildIndex(this.player);
						this.removeChildAt(rem);
						this.player = null;
					
					
					ChamaNovoPlayer();
					
					//MOVE FILA
					if(this.countMoveTorcedores == VelCaidaLinha){	
					for (var mtr2:int = 13; mtr2 >= 0; mtr2--) 
					{
						for (var mtc2:int = 8; mtc2 >=0; mtc2--) 
						{
							if (!(this.torcedoresArray[mtr2][mtc2] is Array)) {
								if(this.torcedoresArray[mtr2][mtc2].parent){
									TweenLite.to(this.torcedoresArray[mtr2][mtc2], 0.5, { y:this.torcedoresArray[mtr2][mtc2].y + 32, onComplete: moveFila, onCompleteParams: [this.torcedoresArray[mtr2][mtc2]] } );
								}else {
									trace("GHost in the HaAusss!");
									//var inhr2:int = this.getChildIndex(this.torcedoresArray[mtr2][mtc2]);
									//this.removeChildAt(inhr2);									
									//this.torcedoresArray[mtr2 + 1][mtc2] = new Array();
								}					
								//this.AlteraFrame(this.torcedoresArray[mtr2][mtc2], "Frente", "Caminhando");
								//TweenLite.to(this.torcedoresArray[mtr2][mtc2], 0.5, {y:this.torcedoresArray[mtr2][mtc2].y+ 32, onComplete: moveFila, onCompleteParams: [this.torcedoresArray[mtr2][mtc2]]} );
							}
						}
					}
					
					this.CriaCharHorizontal();
					this.countMoveTorcedores = 0;
					}
					
				}		
				//Resetar jogador
				
			}
			//}
			
			return retorno;
		}
		
		private function ChamaNovoPlayer():void {
			CharMib.gotoAndPlay(29);
			if (this.LadoAtual == 3) {
				if (this.CharMibFlip == true ) {
					InverteCharMib();
				}
				
				// Move primeiro char da fila da esquerda
				for (var i:int = 0; i < TorcedoresFilaEsquerdaArray.length; i++ ) {
					if (!(TorcedoresFilaEsquerdaArray[i] is Array)) {
						break;
					}
				}
				AlteraFrame(TorcedoresFilaEsquerdaArray[i], "LadoD", "Caminhando");
				TweenLite.to(TorcedoresFilaEsquerdaArray[i], 3, {x:11*32, onComplete: Passo2ChamaNovoPlayer, onCompleteParams:[TorcedoresFilaEsquerdaArray[i], i]} );
			}else {
				if (this.CharMibFlip == false ) {
					InverteCharMib();
				}			
				
				// Move primeiro char da fila da Direita
				for (var j:int = 0; j < TorcedoresFilaDireitaArray.length; j++ ) {
					if (!(TorcedoresFilaDireitaArray[j] is Array)) {
						break;
					}
				}
				AlteraFrame(TorcedoresFilaDireitaArray[j], "LadoD", "Caminhando");
				TweenLite.to(TorcedoresFilaDireitaArray[j], 3, {x:14*32, onComplete: Passo2ChamaNovoPlayer, onCompleteParams:[TorcedoresFilaDireitaArray[j], j]} );
			}
			this.removeEventListener(Event.ENTER_FRAME, gameLoop);
		}
		
		private function Passo2ChamaNovoPlayer(movieClip:MovieClip, PrimerioChar:int):void {
			AlteraFrame(movieClip, "Costas", "Caminhando");
			TweenLite.to(movieClip, 1, { y:movieClip.y - 32, onComplete: Passo3ChamaNovoPlayer, onCompleteParams:[movieClip, PrimerioChar] } );
			
			if (this.LadoAtual == 3) {
				//Cria novo char na fila da direita
				var temp4:MovieClip = CriaChar("LadoD", "Parado");
				temp4.x = 800 + 32;
				temp4.y = 512;
				this.TorcedoresFilaDireitaArray.push(temp4);
				this.addChild(temp4);
				
				//Move fila da direita
				for (var k:int = 0; k < TorcedoresFilaDireitaArray.length; k++ ) {
					if (!(TorcedoresFilaDireitaArray[k] is Array)) {
						AlteraFrame(TorcedoresFilaDireitaArray[k], "LadoE", "Caminhando");
						TweenLite.to(TorcedoresFilaDireitaArray[k], 1, { x:TorcedoresFilaDireitaArray[k].x - 32 } );
					}
				}
			}else {
				//Cria novo char na fila da Esquerda
				var temp5:MovieClip = CriaChar("LadoD", "Parado");
				temp5.x = 0 - 32;
				temp5.y = 512;
				this.TorcedoresFilaEsquerdaArray.push(temp5);
				this.addChild(temp5);
				
				//Move fila da Esquerda
				for (var j:int = 0; j < TorcedoresFilaEsquerdaArray.length; j++ ) {
					if (!(TorcedoresFilaEsquerdaArray[j] is Array)) {
						AlteraFrame(TorcedoresFilaEsquerdaArray[j], "LadoD", "Caminhando");
						TweenLite.to(TorcedoresFilaEsquerdaArray[j], 1, { x:TorcedoresFilaEsquerdaArray[j].x + 32 } );
					}
				}				
			}
			CharMib.gotoAndPlay(1);
		}
		
		private function Passo3ChamaNovoPlayer(movieClip:MovieClip, PrimeiroChar:int):void {
			this.CriaPlayer(movieClip, movieClip.Numero);
			if (this.LadoAtual == 3) {
				LadoAtual = 5;
				
				//Remover char Primeiro da Esquerda
				var inhr2:int = this.getChildIndex(this.TorcedoresFilaEsquerdaArray[PrimeiroChar]);
				this.removeChildAt(inhr2);
				var temp2:Array = new Array();
				this.TorcedoresFilaEsquerdaArray[PrimeiroChar] = temp2;
				
				//Para fila da Direita
				for (var k:int = 0; k < TorcedoresFilaDireitaArray.length; k++ ) {
					if (!(TorcedoresFilaDireitaArray[k] is Array)){
						AlteraFrame(TorcedoresFilaDireitaArray[k], "LadoD", "Parado");
					}
				}				
			}else {
				LadoAtual = 3;

				//Remover char Primeiro da Direita
				var inhr:int = this.getChildIndex(this.TorcedoresFilaDireitaArray[PrimeiroChar]);
				this.removeChildAt(inhr);
				var temp:Array = new Array();
				this.TorcedoresFilaDireitaArray[PrimeiroChar] = temp;	
				
				//Para fila da Esquerda
				for (var j:int = 0; j < TorcedoresFilaEsquerdaArray.length; j++ ) {
					if (!(TorcedoresFilaEsquerdaArray[j] is Array)){
						AlteraFrame(TorcedoresFilaEsquerdaArray[j], "LadoD", "Parado");
					}
				}				
			}
			this.addEventListener(Event.ENTER_FRAME, gameLoop);			
		}
		
		public function deleteAfterGlow(element:MovieClip):void {
			var remI:int = this.getChildIndex(element);
			this.removeChildAt(remI);
		}
		
		public function changeLevel():void
		{
			PessoasNoEstadio = 0;
			for (var hr:int = 0; hr < this.torcedoresArray.length; hr++ ) {
				for (var wr:int = 0; wr < this.torcedoresArray[hr].length; wr++ ) {
					if (!(this.torcedoresArray[hr][wr] is Array)) {
						var inhr:int = this.getChildIndex(this.torcedoresArray[hr][wr]);
						this.removeChildAt(inhr);
						
						var temp:Array = new Array();
						
						this.torcedoresArray[hr][wr] = temp;	
					}
				}
			}
			
			for (var ae:int = 0; ae < this.TorcedoresArquibancadaEsquerdoArray.length; ae++) {
				if (!(this.TorcedoresArquibancadaEsquerdoArray[ae] is Array)) {
					var ie:int = this.getChildIndex(this.TorcedoresArquibancadaEsquerdoArray[ae]);
					this.removeChildAt(ie);
					this.TorcedoresArquibancadaEsquerdoArray[ae] = null;
				}
			}
			
			for (var ad:int = 0; ad < this.TorcedoresArquibancadaDireitoArray.length; ad++) {
				if (!(this.TorcedoresArquibancadaDireitoArray[ad] is Array)) {
					var id:int = this.getChildIndex(this.TorcedoresArquibancadaDireitoArray[ad]);
					this.removeChildAt(id);
					this.TorcedoresArquibancadaDireitoArray[ad] = null;
				}
			}
			
			this.TorcedoresArquibancadaEsquerdoArray = null;
			this.TorcedoresArquibancadaDireitoArray = null;			
			this.TorcedoresArquibancadaEsquerdoArray = new Array();
			this.TorcedoresArquibancadaDireitoArray = new Array();			
			
			var	colNum:int = 9,
				rowNum:int = 14,
				xG:Number = stageWidth - (colNum * 32) * 2 + 32, 
				yG:Number = 64,
				wI:Number = 32,
				hI:Number = 32;			
			
			for (var i:int = 0; i < rowNum; i++) {
				this.torcedoresArray[i] = new Array();
				for (var j:int = 0; j < colNum; j++) {
					if (i < 4) {
						var temp4:MovieClip = CriaChar("Frente", "Parado");
						
						temp4.x = xG + (wI * j);
						temp4.y = yG + (hI * i);
						
						temp4.row = i;
						temp4.col = j;
						this.torcedoresArray[i][j] = temp4;
						this.addChild(temp4);
					
					}else{
						
						var temp5:Array = new Array();
						temp5.x = xG + (wI * j);
						temp5.y = yG + (hI * i);
						
						this.torcedoresArray[i][j] = temp5;
						
					}
				}
			}
			if (VelCaidaLinha >= 1) {
				VelCaidaLinha--;
			}
		}
		
		public function respawArquibancada(pontuacao:int):void
		{
			if ((TorcedoresArquibancadaDireitoArray.length + TorcedoresArquibancadaEsquerdoArray.length) >= 196) {
				changeLevel();
				return;
			}
			
			AdicionaPontos(pontuacao);
			if (TerminouJogo) {
				return;
			}
			
			var xG:int;
			
			if (this.ladoArquibancada == "Esquerdo" && TorcedoresArquibancadaEsquerdoArray.length >= 98) {
				this.ladoArquibancada = "Direito";
			}else if (this.ladoArquibancada == "Direito" && TorcedoresArquibancadaDireitoArray.length >= 98) {
				this.ladoArquibancada = "Esquerdo";
			}
			
			if(this.ladoArquibancada == "Esquerdo"){
				xG = TorcedoresArquibancadaEsquerdoArray.length;
			}else {
				xG = TorcedoresArquibancadaDireitoArray.length;
			}
			if (pontuacao > 0) {
				
				for (var pnt:int = 1; pnt <= pontuacao; pnt++ )
				{
					if (TorcedoresArquibancadaEsquerdoArray.length >= 98 && this.ladoArquibancada == "Esquerdo" ) {
						this.ladoArquibancada = "Direito";
						var PessoasNovas:int = pontuacao - pnt + 1;
					    PessoasNoEstadio = -PessoasNovas;
						respawArquibancada(PessoasNovas);
						break;
					}else if (TorcedoresArquibancadaDireitoArray.length >= 98 && this.ladoArquibancada == "Direito" ) {
						this.ladoArquibancada = "Esquerdo";
						var PessoasNovas2:int = pontuacao - pnt + 1;
						PessoasNoEstadio = -PessoasNovas2;
						respawArquibancada(PessoasNovas2);
						break;
					}
					
					var temp:MovieClip = CriaChar("Frente", "Parado");
					if (this.ladoArquibancada == "Esquerdo") {
						
						var yG:int;
						if ((xG % 7) == 0 && pnt <= 14) {
							yG = Math.floor(xG / 7);
							xG = 0;
						}else if((xG % 7) == 0 && pnt >= 15) {
							yG = Math.floor(pnt / 7);
							xG = 0;
						}
						
						temp.x = xG * 32;
						temp.y = (yG * 32) + 64;
						if (temp.x > 32 * 7) {
							if (TorcedoresArquibancadaEsquerdoArray[TorcedoresArquibancadaEsquerdoArray.length - 1].x % 32 > 5) {
								temp.x = 0;
								temp.y = TorcedoresArquibancadaEsquerdoArray[TorcedoresArquibancadaEsquerdoArray.length - 1].y + 32;								
							}else {
								temp.x = TorcedoresArquibancadaEsquerdoArray[TorcedoresArquibancadaEsquerdoArray.length - 1].x + 32;
								temp.y = TorcedoresArquibancadaEsquerdoArray[TorcedoresArquibancadaEsquerdoArray.length - 1].y;
							}
						}
												
						this.AlteraFrame(temp, "Frente", "Ola");
						if (temp.x >= 224 || temp.x < 0) {
							pontuacao - 100;
							PessoasNoEstadio--;
						}else{
							TorcedoresArquibancadaEsquerdoArray.push(temp);
							this.addChild(temp);
						}
						xG++;
						if(pnt == pontuacao){
						this.ladoArquibancada = "Direito";
						}
					}else {
						
						var yG2:int;
						if ((xG % 7) == 0 && pnt <= 14) {
							yG2 = Math.floor(xG / 7);
							xG = 0;
						}else if((xG % 7) == 0 && pnt >= 15) {
							yG2 = Math.floor(pnt / 7);
							xG = 0;
						}					
						
						temp.x = stageWidth - (32 * 7) + (xG * 32);
						temp.y = (yG2 * 32) + 64;
						
						if (temp.x > 32 * 24) {
							if (TorcedoresArquibancadaDireitoArray[TorcedoresArquibancadaDireitoArray.length - 1].x % 32 > 23) {
								temp.x = 32 * 18;
								temp.y = TorcedoresArquibancadaDireitoArray[TorcedoresArquibancadaDireitoArray.length - 1].y + 32;								
							}else {
								temp.x = TorcedoresArquibancadaDireitoArray[TorcedoresArquibancadaDireitoArray.length - 1].x + 32;
								temp.y = TorcedoresArquibancadaDireitoArray[TorcedoresArquibancadaDireitoArray.length - 1].y;
							}
						}
												
						this.AlteraFrame(temp, "Frente", "Ola");
						
						if (temp.x < 576 || temp.x >= 800) {
							pontuacao - 100;
							PessoasNoEstadio--;
						}else{						
							TorcedoresArquibancadaDireitoArray.push(temp);
							this.addChild(temp);
							xG++;
						}
						
						if(pnt == pontuacao){
						this.ladoArquibancada = "Esquerdo";
						}
					}
				}
			}
		}
		
		public function moveFila(elemento:MovieClip):void 
		{
			elemento.row += 1;
			this.torcedoresArray[elemento.row][elemento.col] = elemento;
			/*
			var xe:int = elemento.x;
			var ye:int = elemento.y;
			var re:int = elemento.row;
			var tipoClass:Class = Class(getDefinitionByName(getQualifiedClassName(elemento)));
			elemento = new tipoClass;
			elemento.x = xe;
			elemento.y = ye;
			elemento.row = re;
			*/
			this.AlteraFrame(elemento, "Frente", "Parado");
		}
		
		public function bounceCollision(row:int, col:int, Tipo:Class):void
		{
				if(torcedoresArray[row - 1] && torcedoresArray[row - 1][col]){
					if (torcedoresArray[row - 1][col] is  Tipo) {
						if (this.controleTorcedoresArray.indexOf(torcedoresArray[row - 1][col]) == -1) {
							//torcedoresArray[row - 1][col].row = row -1;
							//torcedoresArray[row - 1][col].col = col;
							this.controleTorcedoresArray.push(torcedoresArray[row - 1][col]);
							this.bounceCollision(row - 1, col, Tipo);
						}
						
					}
				}
			
				if(torcedoresArray[row + 1] && torcedoresArray[row + 1][col]){
					if (torcedoresArray[row + 1][col] is  Tipo) {
						if (this.controleTorcedoresArray.indexOf(torcedoresArray[row + 1][col]) == -1) {
							//torcedoresArray[row + 1][col].row = row +1;
							//torcedoresArray[row + 1][col].col = col;
							this.controleTorcedoresArray.push(torcedoresArray[row + 1][col]);
							this.bounceCollision(row + 1, col, Tipo);
						}
					}
				}
			
				if (torcedoresArray[row] && torcedoresArray[row][col - 1]) {
					if (torcedoresArray[row][col - 1] is  Tipo) {
						if (this.controleTorcedoresArray.indexOf(torcedoresArray[row][col - 1]) == -1) {
							//torcedoresArray[row][col - 1].row = row;
							//torcedoresArray[row][col - 1].col = col - 1;
							this.controleTorcedoresArray.push(torcedoresArray[row][col - 1]);
							this.bounceCollision(row, col - 1, Tipo);
						}
					}
				}
				
				if (torcedoresArray[row] && torcedoresArray[row][col + 1]) {	
					if (torcedoresArray[row][col + 1] is  Tipo) {
						if (this.controleTorcedoresArray.indexOf(torcedoresArray[row][col + 1]) == -1) {
							//torcedoresArray[row][col + 1].row = row;
							//torcedoresArray[row][col + 1].col = col + 1;
							this.controleTorcedoresArray.push(torcedoresArray[row][col + 1]);
							this.bounceCollision(row, col + 1, Tipo);
						}
					}
				}
			
		}
	}
}